/**
 * 
 */
package com.ubo.java.model.comment;

import java.util.ArrayList;
import java.util.List;

import com.ubo.transform.java.IJavaGenerable;
import com.ubo.transform.java.IJavaVisitor;


/**
 * @author saludegu
 * 
 */
public class Comment implements IJavaGenerable {

	/**
	 * Texte du commentaire.
	 */
	protected final StringBuffer mDesc;

	/**
	 * Liste des paramètres présents dans le commentaire.
	 */
	protected List<String> mParametersList;

	/**
	 * Liste des exceptions lancées par le commentaire.
	 */
	protected List<String> mThrowsList;

	/**
	 * Nom de l'auteur du classifier.
	 */
	protected String mAuthorName;

	/**
	 * Annotation see du commentaire.
	 */
	protected String mSee;

	/**
	 * 
	 * Constructor
	 * 
	 * @param comment
	 */
	public Comment(StringBuffer description) {
		mDesc = description;
	}

	/**
	 * Getter du nom de l'auteur.
	 */
	public String getAuthor() {
		return mAuthorName;
	}

	/**
	 * Getter de la description du commentaire.
	 * 
	 * @return
	 */
	public StringBuffer getDescription() {
		return mDesc;
	}

	/**
	 * Getter du champ see.
	 * 
	 * @return
	 */
	public String getSee() {
		return mSee;
	}

	/**
	 * Ajout de l'auteur dans le commentaire.
	 */
	public void setAuthor() {
		mAuthorName = new String("*\n* @author "
				+ System.getProperty("user.name") + "\n");
	}

	/**
	 * Setter de l'élément see du commentaire.
	 * 
	 * @param classPath
	 * @param methodName
	 */
	public void setSee(String classPath, String methodName) {
		mSee = new String("* @see " + classPath + "#" + methodName + "()\n\t");
	}

	/**
	 * Ajout d'un parametre dans le commentaire.
	 * 
	 * @param name
	 */
	public void addParameter(String parameterName) {
		if (mParametersList == null)
			mParametersList = new ArrayList<String>(0);
		mParametersList.add("*\t@param " + parameterName + "\n");
	}

	/**
	 * Ajout d'une exception dans le commentaire.
	 * 
	 * @param exceptionName
	 */
	public void addException(String exceptionName) {
		if (mThrowsList == null)
			mThrowsList = new ArrayList<String>(0);
		mThrowsList.add("* @throws " + exceptionName + "\n");
	}

	/**
	 * Getter de la liste des commentaires des parametres.
	 * 
	 * @return
	 */
	public List<String> getParameters() {
		return mParametersList;
	}

	/**
	 * Getter de la liste des exceptions.
	 * 
	 * @return
	 */
	public List<String> getExceptions() {
		return mThrowsList;
	}

	/**
	 * @see com.ubo.transform.java.IJavaGenerable#generate(com.ubo.transform.java.IJavaVisitor)
	 */
	@Override
	public void generate(IJavaVisitor<?> generator) {
		generator.generate(this);
	}
}
